<!doctype html>
<html lang="en">

<head>
	<meta charset="UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
	<title>Document</title>
</head>
<!--

    1 try...catch只能捕获到运行时的 同步代码错误，并进入catch。而 语法错误 和 异步错误 就捕捉不到。
    2 也无法获取 Promise 内部的同步代码错误
    3 try..catch比较消耗性能，能少用的最好。

 -->

<body>
	<script>
		// TODO: 1.可以捕获 同步运行时错误 ✅
		// try {
		// 	// 单一作用域try...catch可以捕获错误信息并进行处理
		// 	console.log(obj);
		// } catch (error) {
		// 	console.log('err', error); // ReferenceError: obj is not defined
		// }

		// TODO: 2.可以捕获 throw 主动抛错 ✅
		// try {
		// 	throw '1' // 进入catch
		// 	// throw new Error('2') // 进入catch
		// 	// new Error('2') // 捕获不了
		// } catch (error) {
		// 	console.log('err', error); // 1
		// }

		// TODO: 3.不能捕获 语法错误 ❌
		//  try {
		//      // 删掉一个单引号 （语法错误SyntaxError，好像都不能捕获）
		//      let name = 'Jack;
		//      console.log(nam);
		//  } catch (e) {
		//      console.log('捕获到异常：', e);
		//  }

		// TODO: 4.不能捕获 异步错误 ❌
		// try {
		// 	setTimeout(function () {
		// 		console.log(obj); // 直接报错，不经过catch处理,（可以通过 window.onerror、window.addEventListener("error") 捕获 ）
		// 	}, 100);
		// } catch (error) {
		// 	console.log('err', error);
		// }

		// TODO: 5.不能捕获 promise 内的错 ❌
		// try {
		// 	new Promise((resolve, reject) => {
		// 		console.log(obj); // promise 内的错误只能通过 promise 的错误捕获方法获取（ 可以通过  Promise.catch，或 window.addEventListener("unhandledrejection")
		// 		resolve();
		// 	})
		// } catch (err) {
		// 	console.error('错误', err)
		// }

		// TODO: 6.不能捕获到 网络请求的异常 ❌
		// try {
		// 	const img = document.createElement('img')
		// 	img.src = './xxx.png' // 不论是静态资源异常，或者接口异常，错误都无法捕获到。(可以通过 window.addEventListener("error" 捕获)
		// 	document.body.appendChild(img)
		// } catch (err) {
		// 	console.error('错误', err)
		// }
	</script>
</body>

</html>